package com.nineclock.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.threadlocal.CurrentUserHolder;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.service.SysCompanyContactConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    SysCompanyContactConfigMapper sysCompanyContactConfigMapper;

    /**
     * 新增通讯录信息
     * @param sysCompanyContactConfigDTO
     */
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {
        if (sysCompanyContactConfigDTO == null || sysCompanyContactConfigDTO.getName() == null){
            throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
        }
        SysCompanyContactConfig sysCompanyContactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);
        sysCompanyContactConfig.setStatus((short)1); // 设置状态 为1， 表示可用
        sysCompanyContactConfig.setCompanyId(CurrentUserHolder.get().getCompanyId());
        sysCompanyContactConfig.setFieldType("string"); //设置字段类型为字符串类型


        sysCompanyContactConfigMapper.insert(sysCompanyContactConfig);
    }

    /**
     * 显示通讯里字段信息
     * 如果是第一次访问  会进行初始化
     *
     * @return
     */
    @Override
    public List<SysCompanyContactConfigDTO> queryCompnayContactConfig() {
        Long catalogId = CurrentUserHolder.get().getCompanyId();

        LambdaQueryWrapper<SysCompanyContactConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(SysCompanyContactConfig::getCompanyId,catalogId);


        Integer count = sysCompanyContactConfigMapper.selectCount(lambdaQueryWrapper);

        List<SysCompanyContactConfig> sysCompanyContactConfigs = sysCompanyContactConfigMapper.selectList(lambdaQueryWrapper);

        //       先根据当前登录用户的企业id查询企业通讯录字段
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(catalogId);

        //       如果查询为null，需为该企业初始化企业通讯录字段

        if (count==0){
            for (String name : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig companyContactConfig = new SysCompanyContactConfig();
                companyContactConfig.setCompanyId(catalogId);
                companyContactConfig.setName(name);
                companyContactConfig.setStatus((short)1);
                companyContactConfig.setFieldType("string");
                companyContactConfig.setType("fixed");

                sysCompanyContactConfigMapper.insert(companyContactConfig);
            }
        }
        //如果查询不为null， 则返回该企业对应的企业通讯录字段
        List<SysCompanyContactConfig> contactConfigList = sysCompanyContactConfigMapper.selectList(lambdaQueryWrapper);
        List<SysCompanyContactConfigDTO> sysCompanyContactConfigDTOS = BeanHelper.copyWithCollection(contactConfigList, SysCompanyContactConfigDTO.class);

        return sysCompanyContactConfigDTOS;
    }

    /**
     * 修改通讯录信息的状态
     * @param id
     * @param status
     */
    @Override
    public void updateStatus(Long id, Short status) {

        if (id == null || status == null){
            throw new RuntimeException(ResponseEnum.MESSAGE_PARAMS_LOST.getMessage());
        }
        SysCompanyContactConfig sysCompanyContactConfig =sysCompanyContactConfigMapper.selectById(id);
        if (sysCompanyContactConfig == null){
            throw new RuntimeException(ResponseEnum.MESSAGE_PARAMS_LOST.getMessage());
        }
        sysCompanyContactConfig.setStatus(status);
        sysCompanyContactConfigMapper.updateById(sysCompanyContactConfig);
    }

    /**
     * 删除通讯录信息
     * @param id
     */
    @Override
    public void deleteCompanyContactConfigService(Long id) {
        if (id == null){
            throw new RuntimeException(ResponseEnum.MESSAGE_PARAMS_LOST.getMessage());
        }
        SysCompanyContactConfig sysCompanyContactConfig = sysCompanyContactConfigMapper.selectById(id);
        if (sysCompanyContactConfig == null){
            throw new RuntimeException(ResponseEnum.MESSAGE_PARAMS_LOST.getMessage());
        }
        sysCompanyContactConfigMapper.deleteById(id);
    }
}
